Technical Field
This application relates generally to data communication over a network.
Brief Description of the Related Art
Transmission Control Protocol (TCP) is a core Internet protocol that is the transport layer of the TCP/IP suite. It provides a communication service between an application program and the Internet Protocol (IP). When the application desires to send a large chunk of data across the Internet using IP, it issues a single request to TCP, which then controls IP to send data “in a form of message units” between computers over the Internet. While IP handles actual delivery of the data, TCP keeps track of the individual units of data transmission (segments) into which a message is divided into for efficient routing through the network. For example, when an HTML file is sent from a Web server, the TCP software layer of that server divides the sequence of octets of the file into segments and forwards them individually to the IP software layer, which encapsulates each TCP segment into an IP packet by adding a header that includes the destination IP address. When the client program on the destination computer receives the segments, the TCP layer reassembles the individual segments and ensures they are correctly ordered and error free as it streams them to an application.
TCP uses a congestion control strategy. For each connection, TCP maintains a congestion window that limits the total number of unacknowledged packets that may be in transit end-to-end. TCP uses a mechanism called slow start to increase the congestion window after a connection is initialized and after a timeout. It starts with a window of two times the maximum segment size (MSS). Although the initial rate is low, the rate of increase is high in that, for every packet acknowledged, the congestion window increases by 1 MSS so that the congestion window effectively doubles for every round trip time (RTT). When the congestion window exceeds a threshold (ssthresh), the algorithm enters a congestion avoidance state.
A variant of TCP, called Reno, also implements so-called fast recovery. In this state, TCP retransmits the missing packet that was signaled by three duplicate ACKs, and waits for an acknowledgment of the entire transmit window before returning to congestion avoidance. If there is no acknowledgment, TCP Reno experiences a timeout and enters the slow-start state. TCP New Reno, defined by RFC 3782, improves retransmission during the fast recovery phase of TCP Reno. During fast recovery, for every duplicate ACK that is returned to TCP New Reno, a new unsent packet from the end of the congestion window is sent, to keep the transmit window full. In New Reno, ssthresh starts from infinite and gets modified at each loss event. It is set to the congestion window at the time of loss*ssthresh_decay_factor. It may grow linearly after this point.
As a result, the TCP connection's throughput is very vulnerable to early losses and even a few consecutive losses.